【AT32F421测评】+PWM调节风扇转速
<p>使用PWM可以调节灯光的亮度或风扇的转速等,为了便于验证PWM调节的效果,这里使用的是基于功率放大作用的风扇驱动模块,</p><p>它与开发板的连接情况如图1所示。</p>
<p></p>
<p>图1 硬件连接</p>
<p> </p>
<p>在使用PA6和PA7为PWM输出端口的情况下,其引脚配置函数为:</p>
<pre>
<code class="language-cpp">void GPIO_Configuration(void)
{
GPIO_InitType GPIO_InitStructure;
GPIO_PinAFConfig(GPIOA, GPIO_PinsSource6, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinsSource7, GPIO_AF_1);
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pins = GPIO_Pins_6 | GPIO_Pins_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}</code></pre>
<p>在占空比为50%和37.5%的情况下,2个通道的参数设置值为:</p>
<p>TMR3 Channel1 duty cycle = (TMR3_CCR1/ TMR3_ARR)* 100 = 50%</p>
<p>TMR3 Channel2 duty cycle = (TMR3_CCR2/ TMR3_ARR)* 100 = 37.5%</p>
<p></p>
<p>图2占空比50%时的效果</p>
<p> </p>
<p></p>
<p>图3占空比37% 时的效果</p>
<p> </p>
<pre>
<code class="language-cpp">int main(void)
{
RCC_Configuration();
GPIO_Configuration();
PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
TMR_TimeBaseStructInit(&TMR_TMReBaseStructure);
TMR_TMReBaseStructure.TMR_Period = 665;
TMR_TMReBaseStructure.TMR_DIV = PrescalerValue;
TMR_TMReBaseStructure.TMR_ClockDivision = 0;
TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up;
TMR_TimeBaseInit(TMR3, &TMR_TMReBaseStructure);
/* PWM1 Mode configuration: Channel1 */
TMR_OCStructInit(&TMR_OCInitStructure);
TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM1;
TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
TMR_OCInitStructure.TMR_Pulse = CCR1_Val;
TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_High;
TMR_OC1Init(TMR3, &TMR_OCInitStructure);
TMR_OC1PreloadConfig(TMR3, TMR_OCPreload_Enable);
/* PWM1 Mode configuration: Channel2 */
TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;
TMR_OCInitStructure.TMR_Pulse = CCR2_Val;
TMR_OC2Init(TMR3, &TMR_OCInitStructure);
TMR_OC2PreloadConfig(TMR3, TMR_OCPreload_Enable);
TMR_ARPreloadConfig(TMR3, ENABLE);
TMR_Cmd(TMR3, ENABLE);
while (1);
}</code></pre>
<p> </p>
<p>直流有刷电机不是两根线吗?这三根线的是什么?</p>
本帖最后由 jinglixixi 于 2021-4-22 17:14 编辑
<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&goto=findpost&pid=3057523&ptid=1163372" target="_blank"><font color="#999999">freebsder 发表于 2021-4-21 18:21</font></a></font> 直流有刷电机不是两根线吗?这三根线的是什么?</blockquote>
</div>
<p>这个模块的3个引脚分别2个电源引脚和1个电源控制引脚,相当于一个受控电源开关。开发板的引脚一般是不能直接承受电机工作时的电流的,通常要加一级功放,该模块就是起的这种作用。</p>
<p>风扇转速的图片可以装换为GIF动态图上传,论坛支持GIF格式图片,看着风扇转起来更好</p>
<p>控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM的驱动频率是用72M/(arr=1)/(psc+1)计算的嘛,电机工作频率10KHz</p>
本帖最后由 jinglixixi 于 2021-4-21 22:01 编辑
<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&goto=findpost&pid=3057551&ptid=1163372" target="_blank"><font color="#999999">bqgup 发表于 2021-4-21 21:33</font></a></font> 控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM的驱动频率是用72M/(arr=1)/(psc+ ...</blockquote>
</div>
<p>所用的是一个风扇控制模块,内置了功放,所以直接连开发板的引脚即可。</p>
<p> </p>
<p>The TMR3 is running at 36 KHz:</p>
<p>TMR3 Frequency = TMR3 counter clock/(ARR + 1) = 24 MHz / 666 = 36 KHz</p>
<p>电风扇自带驱动的吧?</p>
jinglixixi 发表于 2021-4-21 20:48
这个模块的3个引脚分别2个电源引脚和1个电源控制引脚,相对于一个受控电源开关。开发板的引脚一般是不能 ...
<p>哦,买的模块?有点意思。</p>
w494143467 发表于 2021-4-22 15:55
电风扇自带驱动的吧?
<p>是的,用起来会方便许多。</p>
jinglixixi 发表于 2021-4-21 21:53
bqgup 发表于 2021-4-21 21:33 控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM ...
<p>把单片机主频72MHz给分频了,分成24MHz了</p>
jinglixixi 发表于 2021-4-21 21:53
bqgup 发表于 2021-4-21 21:33 控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM ...
<p>像uln2003这样的驱动芯片,增大引脚驱动电流的,就可以带动风扇转动,应该不是功放</p>
bqgup 发表于 2021-4-22 19:43
像uln2003这样的驱动芯片,增大引脚驱动电流的,就可以带动风扇转动,应该不是功放
<p>看怎么样理解了,芯片的工作电压通常是一定的,要增加驱动的功率也就增大电流这条路了,所以可以通称作功率放大,即功放。</p>
页:
[1]