jinglixixi 发表于 2021-4-21 16:41

【AT32F421测评】+PWM调节风扇转速

<p>使用PWM可以调节灯光的亮度或风扇的转速等,为了便于验证PWM调节的效果,这里使用的是基于功率放大作用的风扇驱动模块,</p>

<p>它与开发板的连接情况如图1所示。</p>

<p></p>

<p>图1 硬件连接</p>

<p>&nbsp;</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(&amp;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, &amp;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>&nbsp;</p>

<p></p>

<p>图3占空比37% 时的效果</p>

<p>&nbsp;</p>

<pre>
<code class="language-cpp">int main(void)
{
   RCC_Configuration();
   GPIO_Configuration();
   PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
   TMR_TimeBaseStructInit(&amp;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, &amp;TMR_TMReBaseStructure);
  /* PWM1 Mode configuration: Channel1 */
   TMR_OCStructInit(&amp;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, &amp;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, &amp;TMR_OCInitStructure);
   TMR_OC2PreloadConfig(TMR3, TMR_OCPreload_Enable);
   TMR_ARPreloadConfig(TMR3, ENABLE);
   TMR_Cmd(TMR3, ENABLE);
   while (1);
}</code></pre>

<p>&nbsp;</p>

freebsder 发表于 2021-4-21 18:21

<p>直流有刷电机不是两根线吗?这三根线的是什么?</p>

jinglixixi 发表于 2021-4-21 20:48

本帖最后由 jinglixixi 于 2021-4-22 17:14 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3057523&amp;ptid=1163372" target="_blank"><font color="#999999">freebsder 发表于 2021-4-21 18:21</font></a></font> 直流有刷电机不是两根线吗?这三根线的是什么?</blockquote>
</div>

<p>这个模块的3个引脚分别2个电源引脚和1个电源控制引脚,相当于一个受控电源开关。开发板的引脚一般是不能直接承受电机工作时的电流的,通常要加一级功放,该模块就是起的这种作用。</p>

bqgup 发表于 2021-4-21 21:30

<p>风扇转速的图片可以装换为GIF动态图上传,论坛支持GIF格式图片,看着风扇转起来更好</p>

bqgup 发表于 2021-4-21 21:33

<p>控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM的驱动频率是用72M/(arr=1)/(psc+1)计算的嘛,电机工作频率10KHz</p>

jinglixixi 发表于 2021-4-21 21:53

本帖最后由 jinglixixi 于 2021-4-21 22:01 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3057551&amp;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>&nbsp;</p>

<p>The TMR3 is running at 36 KHz:</p>

<p>TMR3 Frequency = TMR3 counter clock/(ARR + 1)&nbsp;= 24 MHz / 666 = 36 KHz</p>

w494143467 发表于 2021-4-22 15:55

<p>电风扇自带驱动的吧?</p>

freebsder 发表于 2021-4-22 17:12

jinglixixi 发表于 2021-4-21 20:48
这个模块的3个引脚分别2个电源引脚和1个电源控制引脚,相对于一个受控电源开关。开发板的引脚一般是不能 ...

<p>哦,买的模块?有点意思。</p>

jinglixixi 发表于 2021-4-22 17:12

w494143467 发表于 2021-4-22 15:55
电风扇自带驱动的吧?

<p>是的,用起来会方便许多。</p>

bqgup 发表于 2021-4-22 19:42

jinglixixi 发表于 2021-4-21 21:53
bqgup 发表于 2021-4-21 21:33 控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM ...

<p>把单片机主频72MHz给分频了,分成24MHz了</p>

bqgup 发表于 2021-4-22 19:43

jinglixixi 发表于 2021-4-21 21:53
bqgup 发表于 2021-4-21 21:33 控制小电机直接用单片机引脚驱动的吗,有没有用到电机驱动之类的,这个PWM ...

<p>像uln2003这样的驱动芯片,增大引脚驱动电流的,就可以带动风扇转动,应该不是功放</p>

jinglixixi 发表于 2021-4-23 09:28

bqgup 发表于 2021-4-22 19:43
像uln2003这样的驱动芯片,增大引脚驱动电流的,就可以带动风扇转动,应该不是功放

<p>看怎么样理解了,芯片的工作电压通常是一定的,要增加驱动的功率也就增大电流这条路了,所以可以通称作功率放大,即功放。</p>
页: [1]
查看完整版本: 【AT32F421测评】+PWM调节风扇转速