本帖最后由 gdwurc 于 2019-5-7 09:03 编辑
首先非常感谢赛元官方提供一个学习的机会!
最近想做一个智能温控杯的东西,刚才赛元有这个活动,对比了一下SC92F8003这个片很合适用来做这个项目,当然Flash是16K用在这个项目上有些太豪了,之前没什么开发经验,所以这个就先不考虑,把东西搞出来再说吧。
由于真正的原理图和PCB都还没完成,所以先用MB0013A 这个开发板顶着先。
设计目标是使用SC92F8003输出三路PWM信号来做驱动信号,其中三路PWM是共用周期为500Hz,但是可以单独调整各路PMW的点空比:
1、首先是PWM初始化
/**************************************************
*函数名称:APP_PWM_Init
*函数功能:App应用初始化PWM
*入口参数:void
*出口参数:void
*功能说明:
**************************************************/
void APP_PWM_Init(void)
{
PWM_BaseInit(PWM_PRESCALER_32,999); //16MHz/32=500kHz,1000个周期=0.5kHz,即是PWM频率=500Hz
PWM0IndependentMode(PWM_POLARITY_NON_INVERT,0);
PWM1IndependentMode(PWM_POLARITY_NON_INVERT,0);
PWM2IndependentMode(PWM2_OutputPin_P26,PWM_POLARITY_NON_INVERT,0);
PWM_Cmd(ENABLE);
2、接着是分别3路PWM的驱动函数
/**************************************************
*函数名称:APP_PWM_FAN_Control
*函数功能:FAN控制
*入口参数:STATE,VALUE
*出口参数:void
*功能说明:
**************************************************/
void APP_PWM_FAN_Control(FunctionalState STATE,uint16_t VALUE)
{
if (STATE == ENABLE)
{
PWMxOutputState(PWM0,PWM_OUTPUTSTATE_ENABLE);
Delay_100us(2);
PWM0IndependentMode(PWM_POLARITY_NON_INVERT,VALUE);
}
else
{
PWMxOutputState(PWM0,PWM_OUTPUTSTATE_DISABLE);
}
}
/**************************************************
*函数名称:APP_PWM_Heat_Control
*函数功能:加热时,PWM输出控制
*入口参数:STATE,VALUE
*出口参数:void
*功能说明:
**************************************************/
void APP_PWM_Heat_Control(FunctionalState STATE,uint16_t VALUE)
{
if (STATE == ENABLE)
{
PWMxOutputState(PWM2,PWM_OUTPUTSTATE_DISABLE);
Delay_100us(2);
PWMxOutputState(PWM1,PWM_OUTPUTSTATE_ENABLE);
PWM1IndependentMode(PWM_POLARITY_NON_INVERT,VALUE);
}
else
{
PWMxOutputState(PWM1,PWM_OUTPUTSTATE_DISABLE);
}
}
4、
/**************************************************
*函数名称:APP_PWM_Cooling_Control
*函数功能:制冷时,PWM输出控制
*入口参数:STATE,VALUE
*出口参数:void
*功能说明:
**************************************************/
void APP_PWM_Cooling_Control(FunctionalState STATE,uint16_t VALUE)
{
if (STATE == ENABLE)
{
PWMxOutputState(PWM1,PWM_OUTPUTSTATE_DISABLE);
PWMxOutputState(PWM2,PWM_OUTPUTSTATE_ENABLE);
PWM2IndependentMode(PWM2_OutputPin_P26,PWM_POLARITY_NON_INVERT,VALUE);
}
else
{
PWMxOutputState(PWM2,PWM_OUTPUTSTATE_DISABLE);
}
}
4、如下是Main函数
int main( void )
{
APP_GPIO_Init();
APP_PWM_Init();
while(1)
{
void APP_PWM_FAN_Control(ENABLE,PWM_DutyCycle_100);
void APP_PWM_Heat_Control(ENABLE,PWM_DutyCycle_90);
void APP_PWM_Cooling_Control(ENABLE,PWM_DutyCycle_10);
}
}
第一次编译后报错了,当然正常的,与预期一样。
我的天啊,花了好长时间才发现,原来是Main函数下调用函数时没有把void这个去掉。
修改后,编译如下:
有些小兴奋,当时用示波器抓取的波形没有保留下来
接下来还有好多代码需要去实现,有空再更新!
再次多谢赛元官方提供的开发板及开发工具。上几张靓照:
响应官方呼唤,留名:gdwurc(微信) 2019.05.07
|