找回密码
 立即注册

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, 下载次数: 7645)





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

使用道具 举报

推荐
 楼主| 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

使用道具 举报

板凳
keyway 发表于 2014-11-1 16:05:23 | 只看该作者
数值比较器控制测电流 ADC 的触发时刻点
请问怎么比较触发点?中间对齐后上下臂导通可能与实际电压无关?
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

5#
keyway 发表于 2014-12-8 10:43:37 | 只看该作者
本帖最后由 keyway 于 2014-12-8 10:45 编辑

这样不准阿,目前我将三相PWM拿来当另外一个触发控制讯号,但是如果三个同时触发可能有问题?

回复 支持 反对

使用道具 举报

6#
 楼主| Angus 发表于 2014-12-8 13:41:53 | 只看该作者
keyway 发表于 2014-12-8 10:43
这样不准阿,目前我将三相PWM拿来当另外一个触发控制讯号,但是如果三个同时触发可能有问题?

...

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

使用道具 举报

7#
keyway 发表于 2014-12-8 13:56:00 | 只看该作者
Angus 发表于 2014-12-8 13:41
不知你想在哪个时刻点触发ADC,中点,还是第二个PWM的前后沿?
你是测电压,还是测电流? 单电阻电流采 ...

我想取得 U V W 三相电流
PI 里的 ID 与 IQ 是用来控制什么的?
回复 支持 反对

使用道具 举报

8#
 楼主| 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的时刻点。
回复 支持 反对

使用道具 举报

9#
keyway 发表于 2014-12-8 14:29:37 | 只看该作者
Angus 发表于 2014-12-8 14:15
如果你采用三电阻测电流, 在下边MOS导通时做ADC即可, 这个简单,如果你采用单电阻测电流,就复杂点,ADC ...

所以我将 U V M PWM ON或OFF 触发 ADC 读取,这样比较准但是浪费3的I/O.

回复 支持 反对

使用道具 举报

10#
 楼主| 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 的边沿信号。
回复 支持 反对

使用道具 举报

11#
keyway 发表于 2014-12-8 14:51:54 | 只看该作者
本帖最后由 keyway 于 2014-12-8 15:02 编辑
Angus 发表于 2014-12-8 14:40
芯片发出 PWM,到 MOS 开关有1us左右的延迟,1us ADC就结束了,所以三相 PWM 的边沿触发 ADC 是不准的。
...

因为上臂与下臂其中2个同时打开才是真正电流读取位置.

另外TabSin[]是多余的,因为Ia+Ib+Ic=0
你可以将 Ia Ib Ic 直接传给 PWM  Duty 输出,最后.....就是完美正弦波了(因为马达转动输出就是 SIN)

目前我在尝试做 sensorless,比 BLDC 更高一的等级
回复 支持 反对

使用道具 举报

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

本版积分规则

新唐MCU