找回密码
 立即注册
查看: 402|回复: 9

受不了了,无刷电机一个月了还没有驱动成功

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-12-22 20:05:24 | 显示全部楼层 |阅读模式

image.png

照着官方的例程写的,一摸一样的就是转不起来

image.png

电机启动匹配启动b值给了200,这部分和例程一样

强制启动后开启比较器

image.png

比较器中测量60度电角度,我这里用的PWMB定时器测量,这里我没有采集8次,

而是每采集一次就做一次平均,>>2相当于除以4,正好是30度电角度

我这测了下每中断一次做平均值和取8次做平均值差不了多少,而且是允许有较大波动

值低了会自动往上拉,高了会逼近中性值

那里的4,5行代码忽略,我测试用的

比较器每有效中断一次PWMB定时器停止计数,把PWMB的计数器清零后开启PWMB向上开始计数

电角度延时用的定时器2,用0减去计算得到的30度电角度时间装载到定时器2计数器中

启动定时器2开始延时计时,XiaoCi是一个bit位,XiaoCi=0等待消磁完成

image.png

30度电角度延时过后定时器2中断,首先先换相,换相需要消磁,给定时器2装载上80个消磁时间

等定时器再次中断消磁结束,XiaoCi=1比较器开启下一次循环

现在的现象是电机只转一圈就不转了,测得的也就是被计算后的30度电角度值100左右

代码逻辑和官方的一模一样,同时定时器2和PWMB定时器设置的频率是一样的

为什么不原搬例程,我这用的单片机硬件功能受限,没有定时器3和4

定时器0用来测PWM,定时器1用来做波特率发生器

官方的例程测量电角度时间是60度,也就是测量两次比较器中断时间

为什么不能只测30度电角度,从换相中断(也就是定时器2中断开始测)到比较器中断计数

测得的这30度电角度时间给后面30度延时用,我觉得是挺合理的,还能少用一个定时器

upload 附件:方波无刷电机驱动.zip

求帮我改下代码吧,我快坚持不下去了,打算放弃了

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-12-22 23:29:21 | 显示全部楼层
建议先完整测试我的电路和软件,再做修改移植。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-12-23 09:25:42 | 显示全部楼层
楼主应该检查UVW的相序是否正确。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-12-23 10:39:21 | 显示全部楼层
社区*** 发表于 2024-12-23 09:25
楼主应该检查UVW的相序是否正确。

核对了很多遍了,没问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:386
  • 最近打卡:2025-04-30 22:13:28
已绑定手机

8

主题

137

回帖

1045

积分

金牌会员

积分
1045
发表于 2024-12-23 10:47:54 | 显示全部楼层

手动驱动一下,找点感觉再写程序吧,要不就不清不楚的。驱动电压调到1-2V,空载,然后人肉换相,直到能转一圈,再动手写程序就没有问题了。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-01-13 13:46:31
已绑定手机

2

主题

4

回帖

36

积分

新手上路

积分
36
发表于 2024-12-24 10:14:31 | 显示全部楼层

我刚开始也是只能强启动的转几下,后面马上停了,我后来改了 比较器滤波次数,然后就可以正常启动了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:290
  • 最近打卡:2025-05-01 19:58:04

23

主题

65

回帖

1870

积分

金牌会员

积分
1870
发表于 2024-12-24 11:02:31 | 显示全部楼层

我也尝试过了,没成功,两个版本,做了几套都是,通电响几声,按按钮后乱转且发热严重,元件都是按电路图买的,今年工作任务比较多,暂时没时间研究了

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-12-24 11:15:06 | 显示全部楼层
[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=133906&ptid=13143][color=#999999]飞吻兔 发表于 2024-12-24 10:14[/color][/url][/size] 我刚开始也是只能强启动的转几下,后面马上停了,我后来改了 比较器滤波次数,然后就可以正常启动了 ...[/quote]

image.png

你是说的这个滤波吗,你设置了多少

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2025-01-13 13:46:31
已绑定手机

2

主题

4

回帖

36

积分

新手上路

积分
36
发表于 2024-12-24 16:53:55 | 显示全部楼层
QQ6243*** 发表于 2024-12-24 11:15
你是说的这个滤波吗,你设置了多少

void CMP_config(void)        //比较器初始化程序
{
CMPCR1 = 0x8C;                        // 1000 1100 打开比较器,P3.6作为比较器的反相输入端,ADC引脚作为正输入端
CMPCR2 = 60;                        //60个时钟滤波   比较结果变化延时周期数, 0~63
P3n_pure_input(0x40);        //CMP-(P3.6)设置为高阻.

```
P_SW2 |= 0x80;                //SFR enable   
```

//        CMPEXCFG |= (0<<6);        //bit7 bit6: 比较器迟滞输入选择: 0: 0mV,  1: 10mV, 2: 20mV, 3: 30mV
//        CMPEXCFG |= (0<<2);        //bit2: 输入负极性选择, 0: 选择P3.6做输入,   1: 选择内部BandGap电压BGv做负输入.
//        CMPEXCFG |=  0;                //bit1 bit0: 输入正极性选择, 0: 选择P3.7做输入,   1: 选择P5.0做输入,  2: 选择P5.1做输入,  3: 选择ADC输入(由ADC_CHS[3:0]所选择的ADC输入端做正输入).
//        CMPEXCFG = (0<<6)+(0<<2)+3;
}

梁工这个设置拿了60,我移到**的芯片,也设置了这个65  就正常了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-12-24 19:55:42 | 显示全部楼层
飞*** 发表于 2024-12-24 16:53
void CMP_config(void)        //比较器初始化程序
{
CMPCR1 = 0x8C;                        // 1000 110 ...

这个延时最大只能设置63,6位滤波
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:01 , Processed in 0.153990 second(s), 122 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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