找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

简单的M451工程模板_ 电机弦波控制源码

  [复制链接]
跳转到指定楼层
楼主
Angus 发表于 2014-8-13 18:58:15 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Angus 于 2015-2-3 19:23 编辑

本代码配置好了时钟,GPIO,Timer1,UART,PWM

芯唐 M4 芯片 PWM 特点:
1> 六路 PWM 同步起动,也可各自不同频率工作。
2> 中心对齐,分开控制上计数 PWM 跳变时刻,和下计数 PWM 跳变时刻,分辩率提高一倍,还可产生右偏的 PWM 波。
3> 额外一个数值比较器控制测电流 ADC 的触发时刻点。
4> 占空比寄存器的值,可让PWM输出全低和全高。



本代码
// PWM 周期 2000,  PWM 时钟 36M,所以 PWM 频率为 18KHz。
// 12 位的正弦函数表。
// PWM024 驱动上臂,输出高时 MOSFET 导通,PWM135 驱动下臂,输出低时 MOSFET 导通
// PA0_HA,PA1_HB,PA2_HC, 60度 Hall (HC信号是反相的)


M451_template.zip (246.98 KB, 下载次数: 7184)





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 顶 踩
回复

使用道具 举报

沙发
 楼主| Angus 发表于 2014-11-3 12:58:23 | 显示全部楼层
keyway 发表于 2014-11-1 16:05
数值比较器控制测电流 ADC 的触发时刻点
请问怎么比较触发点?中间对齐后上下臂导通可能与实际电压无关? ...

你可以在中点做ADC, 也可以在某一路 PWM 的跳变沿前后做ADC. 哪一时刻做ADC, 看你的控制方法了, 配置数值比较器, 可以在你预想的时刻点做ADC.
回复 支持 反对

使用道具 举报

板凳
 楼主| Angus 发表于 2014-12-8 13:41:53 | 显示全部楼层
keyway 发表于 2014-12-8 10:43
这样不准阿,目前我将三相PWM拿来当另外一个触发控制讯号,但是如果三个同时触发可能有问题?

...

不知你想在哪个时刻点触发ADC,中点,还是第二个PWM的前后沿?
你是测电压,还是测电流? 单电阻电流采样,还是三电阻?  
回复 支持 反对

使用道具 举报

地板
 楼主| Angus 发表于 2014-12-8 14:15:29 | 显示全部楼层
keyway 发表于 2014-12-8 13:56
我想取得 U V W 三相电流
PI 里的 ID 与 IQ 是用来控制什么的?

如果你采用三电阻测电流, 在下边MOS导通时做ADC即可, 这个简单,如果你采用单电阻测电流,就复杂点,ADC采样点要跟踪第二次上下MOS切换的那一路PWM,每次PWM中断里,改变占空比时,都要重新计算一下做ADC的时刻点。
回复 支持 反对

使用道具 举报

5#
 楼主| Angus 发表于 2014-12-8 14:40:02 | 显示全部楼层
keyway 发表于 2014-12-8 14:29
所以我将 U V M PWM ON或OFF 触发 ADC 读取,这样比较准但是浪费3的I/O.

芯片发出 PWM,到 MOS 开关有1us左右的延迟,1us ADC就结束了,所以三相 PWM 的边沿触发 ADC 是不准的。
我们的芯片特意做了一个用于触发 ADC,而不输出波形的 PWM 寄存器,用这个寄存器产生触发 ADC 的边沿信号。
回复 支持 反对

使用道具 举报

6#
 楼主| Angus 发表于 2014-12-8 16:02:48 | 显示全部楼层
keyway 发表于 2014-12-8 14:51
因为上臂与下臂其中2个同时打开才是真正电流读取位置.

另外TabSin[]是多余的,因为Ia+Ib+Ic=0

您是做FOC控制,还是直接转矩控制?
回复 支持 反对

使用道具 举报

7#
 楼主| Angus 发表于 2014-12-8 16:55:46 | 显示全部楼层
keyway 发表于 2014-12-8 16:27
FOC 向量控制(vector control)也称为磁场导向控制(field-oriented control,简称FOC)
无感测器向量控制 ...

{:soso_e179:}
回复 支持 反对

使用道具 举报

8#
 楼主| Angus 发表于 2015-1-5 13:53:44 | 显示全部楼层
cccfeb 发表于 2015-1-4 17:00
我近几天看M451_Moror_VF代码,请问PD输出那些脚控制电机?有没有电路原理图? ...

M451有PWM0和PWM1两组PWM,每组六路PWM,这个代码用的是PWM0,是PC012345,从代码中也可以看出来,注释有说明。
回复 支持 反对

使用道具 举报

9#
 楼主| Angus 发表于 2015-1-7 09:58:55 | 显示全部楼层
本帖最后由 Angus 于 2015-1-18 13:23 编辑
nt52241930 发表于 2015-1-6 15:38
您好,
請教一下,
目前已將PWM設定為 上下計數互補模式,PWM頻率為8K,PWM中斷亦設定完畢(中心中斷),輸出波形 ...


PWM最大值发生中断, 但PWM计数器没停止计数,  硬件入栈8个寄存器, 执行到中断里, 遇到断点,这时防真器再去读PWM计数器, PWM计数器应已减计数多个PWM时钟了, 所以这时读到的PWM计数器的值比最大值小一点。
回复 支持 1 反对 0

使用道具 举报

10#
 楼主| Angus 发表于 2015-1-29 12:46:42 | 显示全部楼层
nt52241930 发表于 2015-1-23 16:34
您好,目前了解您TABLE表為180度,
您HALL訊號部分,3與4 皆為0,
但HALL異常時,應是000 OR 111

Hall 信号有两种,一种是60度Hall,有全0全1;另一种是120度Hall,无全0全1
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU