使用STM32和Keil仿真编写C代码实现电机控制,输出3对互补PWM信号

1、使用芯片STM32F103VC

2、打开MXCube新建工程

3、配置下载模式为SW,外部晶振8M,主频72M

 4、配置高级定时器1,使用内部晶振,开启互补PWM输出模式

 5、配置载波频率10k,即周期为10us

定时周期 = (Prescaler + 1) × (Period + 1) ÷ 时钟频率 单位:秒(S))

时钟频率72MHz = 72 × 10^6(Hz)

故:Prescaler + 1 = 72

Period + 1 = 100

选择先上升后下降模式,即模式3

 并自动装载

 6、选择死区时间 

 7、配置初始PWM都为50%

 8、开启定时中断

 9、保存,并代码生成

10、打开工程

加入代码如下:

	__HAL_TIM_CLEAR_FLAG(&htim1, TIM_FLAG_UPDATE);//启用前清除TIM中断标志位
	__HAL_TIM_CLEAR_IT(&htim1, TIM_IT_UPDATE);//启用前清除TIM中断
	HAL_TIM_Base_Start_IT(&htim1);//开启TIM计数

	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//开启互补pwm
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);//|TIM_CHANNEL_2|TIM_CHANNEL_3);	
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_2);//开启互补pwm
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);//|TIM_CHANNEL_2|TIM_CHANNEL_3);
	HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_3);//开启互补pwm
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);//|TIM_CHANNEL_2|TIM_CHANNEL_3);

定时器回调函数

//TIM定时返回函数
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim)//回调函数
{
 
	if(htim->Instance == TIM1)//判断进入定时1通道回调函数
	{

    }
}

11、MDK仿真配置

DARMSTM32.DLL        -pSTM32F103VC        PARMSTM32.DLL        -pSTM32F103VC

原始信息

 

DCM.DLL        -pCM3                TCM.DLL        -pCM3

12、开启软件仿真

13、 开启逻辑分析

 14、建立IO信息读取

#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected /
#define GPIO_Pin_1 ((uint16_t)0x0002) /!< Pin 1 selected /
#define GPIO_Pin_2 ((uint16_t)0x0004) /!< Pin 2 selected /
#define GPIO_Pin_3 ((uint16_t)0x0008) /!< Pin 3 selected /
#define GPIO_Pin_4 ((uint16_t)0x0010) /!< Pin 4 selected /
#define GPIO_Pin_5 ((uint16_t)0x0020) /!< Pin 5 selected /
#define GPIO_Pin_6 ((uint16_t)0x0040) /!< Pin 6 selected /
#define GPIO_Pin_7 ((uint16_t)0x0080) /!< Pin 7 selected /
#define GPIO_Pin_8 ((uint16_t)0x0100) /!< Pin 8 selected /
#define GPIO_Pin_9 ((uint16_t)0x0200) /!< Pin 9 selected /
#define GPIO_Pin_10 ((uint16_t)0x0400) /!< Pin 10 selected /
#define GPIO_Pin_11 ((uint16_t)0x0800) /!< Pin 11 selected /
#define GPIO_Pin_12 ((uint16_t)0x1000) /!< Pin 12 selected /
#define GPIO_Pin_13 ((uint16_t)0x2000) /!< Pin 13 selected /
#define GPIO_Pin_14 ((uint16_t)0x4000) /!< Pin 14 selected /
#define GPIO_Pin_15 ((uint16_t)0x8000) /!< Pin 15 selected 
 

作者:逐梦之程

物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32和Keil仿真编写C代码实现电机控制,输出3对互补PWM信号

发表评论