久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1434|回復: 1
打印 上一主題 下一主題
收起左側

Proteus仿真stm32 PWM直流電機出現Speed超出預設范圍的值

[復制鏈接]
跳轉到指定樓層
樓主


存在問題:預期的Speed是在-100~100,但實際proteus仿真,反轉時Speed為何存在超出范圍的數值
單片機源程序如下:
main.c代碼:#include "stm32f10x.h"
#include  "OLED.h"
#include "delay.h"
#include "Dc_Motor.h"
#include "key.h"

u8 Key;
int8_t Speed;

int main(void)
{
        delay_init();
        OLED_Init();
        Key_Init();
        Dc_Motor_Init();
        OLED_Clear();
        OLED_ShowString(1,1,"Key:");
        OLED_ShowString(2,1,"Speed:");
        Dc_Motor_SetSpeed(0);
        while(1)
        {
                Key=Key_GetNum();
                if (Key == 1)
                {
                        Speed += 30;
                        if (Speed > 100)
                        {
                                Speed = -100;
                        }
                        OLED_ShowString(1,5,"+");
                        OLED_ShowNum(2,7,Speed,6);
                }
                if (Key == 2)
                {
                        Speed -= 40;
                        if (Speed < -100)
                        {
                                Speed = 100;
                        }
                        OLED_ShowString(1,5,"-");
                        OLED_ShowNum(2,7,Speed,6);
                }
                Dc_Motor_SetSpeed(Speed);
               
        }               
}
PWM.c代碼:

#include "PWM.h"

void PWM_Init(void)
{
        //開啟定時器2時鐘
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
        //開啟GPIOA時鐘
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

        
        //GPIOA配置
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        //GPIOA初始化
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        
        TIM_InternalClockConfig(TIM2);//TIM2 選擇定時器的內部時鐘源
        //時基單元配置
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        //時鐘分頻:1,2,4分頻
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
        //計數器計數方式:向上、向下、中央對齊計數
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
        //設置ARR時鐘周期
        TIM_TimeBaseInitStructure.TIM_Period=100-1;//ARR:10000個數后重裝
        //設置PSC預分頻的值
        TIM_TimeBaseInitStructure.TIM_Prescaler=720-1;//PSC:720分頻,計數頻率100k
        //重復計數器的值,高級定時器,這里用不到設置為0
        TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;
        //時基單元初始化
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);
        
        //初始化配置定時器輸出比較單元:TIM_OC
        TIM_OCInitTypeDef TIM_OCInitStructure;
        TIM_OCStructInit(&TIM_OCInitStructure);
        //輸出比較的模式:PWM1模式
        TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
        //輸出比較的極性:高極性:極性不翻轉
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
        //設置輸出使能
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        //設置捕獲比較寄存器CCR的值
        TIM_OCInitStructure.TIM_Pulse=0;
        //輸出比較單元,通道3初始化
        TIM_OC3Init(TIM2,&TIM_OCInitStructure);
        
        //使能TIM2
        TIM_Cmd(TIM2,ENABLE);
}


void PWM_SetCompare1(u16 Compare)
{
        //修改CCR值
        TIM_SetCompare1(TIM2,Compare);
}

void PWM_SetCompare2(u16 Compare)
{
        //修改CCR值
        TIM_SetCompare2(TIM2,Compare);
}

void PWM_SetCompare3(u16 Compare)
{
        //修改CCR值
        TIM_SetCompare3(TIM2,Compare);
}

Dc_Motor.c代碼:
#include "Dc_Motor.h"


void Dc_Motor_Init(void)
{
        //電機速度控制設置
        PWM_Init();
        //電機方向控制設置
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
}


void Dc_Motor_SetSpeed(int8_t Speed)
{
        //正轉
        if (Speed > 0)
        {
                GPIO_SetBits(GPIOA, GPIO_Pin_4);//AIN1:H
                GPIO_ResetBits(GPIOA, GPIO_Pin_5);//AIN2:L
                PWM_SetCompare3(Speed);
        }
        //反轉
        else if(Speed < 0)
        {
                GPIO_ResetBits(GPIOA, GPIO_Pin_4);//AIN1:L
                GPIO_SetBits(GPIOA, GPIO_Pin_5);//AIN2:H
                PWM_SetCompare3(-Speed);
        }
        //停止
        else
        {
                GPIO_ResetBits(GPIOA, GPIO_Pin_4);//AIN1:L
                GPIO_ResetBits(GPIOA, GPIO_Pin_5);//AIN2:L
//                PWM_SetCompare3(-Speed);
        }
}

key.c代碼:
#include "key.h"

void Key_Init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//GPIOB
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設置上拉模式 GPIO_Mode_IPU
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_11);
}

uint8_t Key_GetNum(void)
{
        uint8_t KeyNum = 0;
        if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1)==0)
        {
                delay_ms(20);
                while(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_1)==0);
                delay_ms(20);
                KeyNum=1;
        }
        else if(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_11)==0)
        {
                delay_ms(20);
                while(GPIO_ReadInputDataBit(GPIOB , GPIO_Pin_11)==0);
                delay_ms(20);
                KeyNum=2;
        }
        return KeyNum;
}


仿真程序TIM2_out_compare_dc_motor.7z

314.64 KB, 下載次數: 16

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:94031 發表于 2024-2-27 11:38 | 只看該作者
Speed算出來的值沒有問題,應該是OLED顯示與仿真問題
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人在线播放 | 久久久久久久综合 | 亚洲精品一区二区网址 | 超碰成人免费 | 亚洲国产精品久久久久婷婷老年 | 亚洲精品免费在线 | 日本成人在线观看网站 | 国产一区二区在线播放 | 精品日韩在线 | 亚洲视频在线观看一区二区三区 | 九九热这里只有精品在线观看 | 亚洲精品久久久蜜桃 | 国产乡下妇女做爰 | 拍真实国产伦偷精品 | 日韩免费看片 | 蜜桃视频在线观看免费视频网站www | 在线看av网址 | 九色av| 久久久网| 超碰免费在线 | 九九在线视频 | 亚洲国产成人精品女人久久久 | 免费在线看黄 | 欧美日韩国产一区二区三区 | 91精品国产91久久久久久丝袜 | 日韩中文字幕 | 激情福利视频 | 久久精品一区二区三区四区 | 欧美日韩综合 | 国产黄a一级 | 亚洲3级 | 亚洲精品9999久久久久 | 国产精品乱码一区二区三区 | 91就要激情 | 午夜小视频在线播放 | 国产成人精品一区二区三区在线 | 91视频在线| 国产精品99久久久久久久久久久久 | 91亚洲国产成人久久精品网站 | 欧美aⅴ | 日韩在线一区二区三区 |