本帖最后由 dzzwoaizi 于 2017-8-25 08:40 编辑 . N& K$ ~7 |5 r" Y& T- i 其实,看ST的官方demo有一种使人头大的感觉,各种代码各种库集合到一起,不容易上手,顾打算利用P-NUCLEO-IHM001转动手中带HALL的BLDC电机。原本是要在搞一套无位置BLDC的代码,但是苦耐于P-NUCLEO-IHM001是利用ADC检测反动势的(我利用的是比较器检测过零点)2 n. _* ]. _5 r4 S6 U /==============分割线===================/ 带位置传感器的BLDC点击控制算法是比较简单的,只需要搞懂HALL位置和通电顺序的对应关系就能将电机转起来。 BLDC_HALL所以的单片机资源% f6 ~2 P& ^) j) m! r! n (1)高级定时器TIM1+ADC+DMA$ x" l+ O8 A4 H( Y. K ST在这一块做的堪称完美,高级定时器的CC4通道用来触发ADC采集数据,ADC采集完成之后利用DAM搬运到数组中,这所有的流程都是硬件完成的,程序只需要读取数组中的ADC采样值就可以了,这样大大节省了单片机的运算时间。2 a! }8 [( L# K0 A( r! D9 p (2)3路外部中断连接HALL 这里你当然也可以利用TIM接口与高级定时器直接连接在一起,利用硬件在换向,但是这种方式不便于移植算法。相反,ST的每个IO口都可以作为外部中断口来用,我们只需要随便3个IO就可以了。 利用以上资源就能够将电机转起来。) B: ^/ p. q. Q6 d- x 4 \4 R. l0 Y- E9 H7 Y 流程分3步,1.搭建STM32F3开发环境 2.底层代码编写,3.算法如何调试( P" m! q- O! ]9 M2 r5 ? ! |3 i7 f/ W0 o' S% V5 U 昨天抽了个时间建立了一个工程,找不到flash加载了,很是郁闷,经过一番查找,终于找打解决办法。因为我装个KEIL4.7,可能是因为我之前卸载KEIL5从新装pach包的时候装错地址了。解决办法:在KEIL4安装目录下找到E:\2.software\mdk470\ARM\Flash 把里面的 STM32XXX.FLM文件复制到你安装的LEIL5的\ARM\Flash中既可以了。附件为刚建好的工程模板, |
如何利用高级定时器CC4通道来触发ADC采集数据在利用DMA搬运到数组之中的。* F5 t2 l% y4 f; k9 L+ }
说实话,第一次用STM32F3系列的单片机,和F0的还不是非常一样,我还花了很多时间将寄存器手册看了几个重要的外设。仔细阅读了STM32F的寄存器手册之后发现只有注入组才能用CC4触发ADC,如图为ADC外部信号触发的图4 C" H. T, L# v. {' i$ o! y. [
这个是规则组和注入阻外部触发信号选择,我选择的规则组,这里用TIM1_CC1触发ADC采集,所以相对应的代码配置如下:% _9 P/ O! d5 l& [
可以看到这里用的是是PA1和PC2& v# Q" j4 W6 T% C5 K- `9 @: u
这里BUF对应的数据如下 :ADC_Tab[0]存放的电压的采集值。ADC_Tab[1]存放的温度的采集值" q) X# z6 E% F) [' B
你只需要在主程序中调用者两个值就可以了!4 U; ?0 M0 u) x. M' ]; _
% `8 v. _0 V" G" N$ N' F; w, G
附件为自己调试好的程序,有兴趣的可以自己下载看看,里面基本的功能都调试完成,代码的硬件就是P-NUCLEO-IHM001,
视频会晚些上传给大家看看效果。
谢谢楼主分享
请问这个是什么文档?404了
遇到同行了相互学习
正在學習電動機驅動