找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4954|回复: 10
打印 上一主题 下一主题
收起左侧

单片机如何模拟编码器ABZ脉冲?

[复制链接]
跳转到指定楼层
楼主
我想用单片机模拟发送 正交编码器的ABZ脉冲,用于测试   哪位大神帮忙指导下啊,感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:77479 发表于 2021-4-25 16:29 | 只看该作者
你把需要的波形画出来看看,频率、振幅?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:910902 发表于 2021-4-25 17:06 | 只看该作者
振幅  5V    频率可调最大85kHz

波形图.jpg (13.99 KB, 下载次数: 53)

波形图.jpg
回复

使用道具 举报

地板
ID:910902 发表于 2021-4-25 17:10 | 只看该作者
gd2051 发表于 2021-4-25 16:29
你把需要的波形画出来看看,频率、振幅?

振幅   5V
频率   85kHz

波形图.jpg (13.99 KB, 下载次数: 47)

波形图.jpg
回复

使用道具 举报

5#
ID:775776 发表于 2021-4-25 18:03 | 只看该作者
stm32可以输出多路正弦信号, 只要确认好abz的相位关系就好

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:910902 发表于 2021-4-25 18:05 | 只看该作者
wangyuejia2015 发表于 2021-4-25 18:03
stm32可以输出多路正弦信号, 只要确认好abz的相位关系就好

我用的是STC15W4单片机,我就是项位不知道该怎么写,麻烦指点了
回复

使用道具 举报

7#
ID:910902 发表于 2021-4-26 09:44 | 只看该作者
波形的相位,用单片机的哪个功能能调试出来呢
回复

使用道具 举报

8#
ID:824490 发表于 2021-4-26 16:24 | 只看该作者
只要用2个定时器。一个寄存器(二次计数),一个标志位,
2个定时器(A/B),设为自动装载。
比如:
如果需求频率是1Hz,可设定时器的中断为100Hz或更高,多加一个寄存器做二次计数10,寄存器计数到5时触发时器B计数(触发一次即可),同时置IO口Z为高,寄存器计数计数到10时置IO口Z为低,反转IO口A,同时复位寄存器。定时器B中断时,反转IO口B。

不知这样符合不符合?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:910902 发表于 2021-4-27 14:16 | 只看该作者
名字不是重点 发表于 2021-4-26 16:24
只要用2个定时器。一个寄存器(二次计数),一个标志位,
2个定时器(A/B),设为自动装载。
比如:

我是用定时器测试过,但是用定时器中断时,我要发出88KHz的频率,这样就有个问题出现了,占用了太多的CPU资源,数码管显示程序就出了问题了。
回复

使用道具 举报

10#
ID:910902 发表于 2021-4-27 22:25 | 只看该作者
哪位大神能帮忙指导下啊,这个程序哪里错了呢,不工作呀

#include <STC15F2K60S2.H>

void PWM_init(void)
{
        P_SW2 |= 0x80;   //扩展RAM选择
        PWMC = 163;
        PWMCFG = 0x01;  //PWM2初始化高电平-1,PWM3初始化低电平-0
        PWMCR |= 0x03;  //关闭PWM波形发生器,使能PWM2-P3.7、PWM3-P2.1
        PWMCKS |= 0x01;  //PWM时钟源选择分频器分频之后的时钟   2分频系统时钟,当SELT=0时,PWM时钟为系统时钟/(PS[3:0]+1)
        //PWMCH = 0;
        //PWMCL = 163;
        //PWM2T1H = 0;
        //PWM2T1L = 1;
        PWM2T1 = 33;
        PWM2T2 = 98;
        PWM2CR = 0x00;
        P37 = 1;
        PWM3T1 = 65;
        PWM3T2 = 130;
        PWM3CR = 0x00;
        P21 = 0;
        PWMCR |= 0x80;
        P_SW2 &= ~0x80;
}

void main(void)
{
        PWM_init();
        while(1);
}


回复

使用道具 举报

11#
ID:824490 发表于 2021-4-28 09:38 | 只看该作者
jingwei2174 发表于 2021-4-27 14:16
我是用定时器测试过,但是用定时器中断时,我要发出88KHz的频率,这样就有个问题出现了,占用了太多的CPU ...

不知你用的晶振频多大?用什么IC?LED有驱动IC,还是直接MCU驱动?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表