找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1614|回复: 1
收起左侧

STC12C5A60S2单片机两轮平衡小车程序源码

[复制链接]
ID:367219 发表于 2020-4-6 09:33 | 显示全部楼层 |阅读模式
主函数程序:

#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;            //定时10MS
    TH1 = 0xB8;
   
    if(!Start_Flag)//启动前的延时
    {
        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, 下载次数: 30, 下载积分: 黑币 -5

12单片机平衡车源代码,自己调试过

回复

使用道具 举报

ID:1 发表于 2020-4-7 21:31 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表