找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1945|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STC12C5A60S2單片機(jī)兩輪平衡小車程序源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:367219 發(fā)表于 2020-4-6 09:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
主函數(shù)程序:

#include <stc12c5a.h>
#include <intrins.h>
#include <stdio.h>
#include <math.h>
#include "lcd1602.h"
#include "mpu6050.h"
#include "pid_own.h"
#include "kalman.h"
#include "pwm_motor.h"
#include "spe_pos.h"


int INT_PWM;
unsigned int Init_Time=0,Start_Flag=0;


void main()
{
    lcd_init();
    InitMPU6050();
    PWM_Motor_Init();
    INT_Init();
   
    P1M0=1;
    P1M1=0;
   

    while(1)
    {

        if(GYRO_X<0)
        {
            write_com(0x80);
            write_dat('-');
            write_dat('0'+(uchar)abs(GYRO_X)/100);
            write_dat('0'+(uchar)abs(GYRO_X)%100/10);
            write_dat('0'+(uchar)abs(GYRO_X)%10);
        }
        else
        {
            write_com(0x80);
            write_dat('+');
            write_dat('0'+(uchar)GYRO_X/100);
            write_dat('0'+(uchar)GYRO_X%100/10);
            write_dat('0'+(uchar)GYRO_X%10);
        }

        if(Angle_End<0)
        {
            write_com(0x80+0x40);
            write_dat('-');
            write_dat('0'+(uchar)abs(Angle_End)/100);
            write_dat('0'+(uchar)abs(Angle_End)%100/10);
            write_dat('0'+(uchar)abs(Angle_End)%10);
        }
        else
        {
            write_com(0x80+0x40);
            write_dat('+');
            write_dat('0'+(uchar)Angle_End/100);
            write_dat('0'+(uchar)Angle_End%100/10);
            write_dat('0'+(uchar)Angle_End%10);
        }
        
        if(speed<0)
        {
            write_com(0x80+9);
            write_dat('-');
            write_dat('0'+(uchar)abs(speed)/100);
            write_dat('0'+(uchar)abs(speed)%100/10);
            write_dat('0'+(uchar)abs(speed)%10);
        }
        else
        {
            write_com(0x80+9);
            write_dat('+');
            write_dat('0'+(uchar)speed/100);
            write_dat('0'+(uchar)speed%100/10);
            write_dat('0'+(uchar)speed%10);
        }
        
        if(position<0)
        {
            write_com(0x80+0x40+9);
            write_dat('-');
            write_dat('0'+(uint)abs(position)/10000);
            write_dat('0'+(uint)abs(position)%10000/1000);
            write_dat('0'+(uint)abs(position)%1000/100);
            write_dat('0'+(uint)abs(position)%100/10);
            write_dat('0'+(uint)abs(position)%10);
        }
        else
        {
            write_com(0x80+0x40+9);
            write_dat('+');
            write_dat('0'+(uint)abs(position)/10000);
            write_dat('0'+(uint)abs(position)%10000/1000);
            write_dat('0'+(uint)position%1000/100);
            write_dat('0'+(uint)position%100/10);
            write_dat('0'+(uint)position%10);
        }
        
        if(Start_Flag)
        {
            INT_PWM = pid_proc(Angle_End,Gyro_End,speed,position);
            
            Motor_Con(-INT_PWM,-INT_PWM);
            
        }
    }
   
}

void timer1() interrupt 3
{
    TL1 = 0x00;            //定時(shí)10MS
    TH1 = 0xB8;
   
    if(!Start_Flag)//啟動(dòng)前的延時(shí)
    {
        Init_Time++;
        if(Init_Time>=100) Start_Flag=1;
    }
   
    if(Start_Flag)
    {
        Get_Date();
        Kalman_Filter(Angel_accY,GYRO_X);
        Speed_Position_Get();
        speed_mr = speed_ml = 0;
    }
}
完整的程序在附件中


STC12C5A60S2兩輪平衡小車程序源碼.zip

111.56 KB, 下載次數(shù): 30, 下載積分: 黑幣 -5

12單片機(jī)平衡車源代碼,自己調(diào)試過

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2020-4-7 21:31 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表