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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

語音智能小車程序:語音識別模塊LD3320+STMF103

[復制鏈接]
跳轉到指定樓層
樓主
使用LD3320模塊,實現用戶說一句話,比如說一句"小車左轉",小車就會進行左轉,到后面會加SD卡模塊,實現語音交互等功能.

LD3320是非特定人(不用針對指定人)語音識別芯片,即語音聲控芯片。最多可以識別50條預先內置的指令。

工作模式:
LD3320(LDV7)語音模塊可以工作在以下三種模式:
普通模式:直接說話,模塊直接識別;
按鍵模式:按鍵觸發開始ASR進程;
口令模式:需要一級喚醒詞(口令);


推薦使用口令模式,這樣避免嘈雜環境下誤動作。

小車與STMF103接線圖:


                    A輪  \\   ------   //  B輪 TIM2
                             \\   ------  //
                                  ------
                               //  ------ \\
                    D輪  //   ------   \\  C輪 TIM3
               

           控制ABCD四個輪子的PWM
            PC6--A輪 //左前 ---- 電機驅動1-ENA
            PC7--B輪 //右前 ---- 電機驅動1-ENB
            PC8--C輪 //右后 ---- 電機驅動2-ENA
            PC9--D輪 //左后 ---- 電機驅動2-ENB
        
            A輪:PC1 PC0 控制前后運動   PC1----IN2,PC0----IN1
            B輪:PC3 PC2 控制前后運動     PC3----IN4,PC2----IN3            
            C輪:PC10,PC11控制前后運動 PC10 --- IN1,PC11---IN2
            D輪:PC12,PD2控制前后運動  PC12 --- IN3,PD2 ---IN4

制作出來的實物圖如下:


LD332模塊與單片機接線圖:
LD3320 5v-----單片機的電源5v,GND----GND;
LD3320 RST----PB15
LD3320  CS---PB13
LD3320 IRQ---PB12
LD3320 CS---PA4
LD3320  SCK---PA5
LD3320  MISO----PA6
LD3320   MOSI---PA7

主要STM32單片機代碼如下:

測試的時候可以串口助手進行調試.
#include "LD3320.h"
uint8 nAsrStatus = 0;   
uint8 nLD_Mode = LD_MODE_IDLE;//用來記錄當前是在進行ASR識別還是在播放MP3
uint8 ucRegVal;

///用戶修改
void LD3320_main(void)
{
    uint8 nAsrRes=0;
    LD3320_init();      
     printf("1、小車前進\r\n");
    printf("2、小車后退\r\n");                 
    printf("3、小車右轉\r\n");         
    printf("4、小車左轉\r\n");            
    printf("5、小車停止\r\n");         
    nAsrStatus = LD_ASR_NONE;//初始狀態:沒有在作ASR

    while(1)
    {
        switch(nAsrStatus)
        {
            case LD_ASR_RUNING:
            case LD_ASR_ERROR:        
                    break;
            case LD_ASR_NONE:
                    nAsrStatus=LD_ASR_RUNING;
                    if (RunASR()==0)//啟動一次ASR識別流程:ASR初始化,ASR添加關鍵詞語,啟動ASR運算
                    {        
                        nAsrStatus = LD_ASR_ERROR;
                    }
                    break;
            case LD_ASR_FOUNDOK:
                     nAsrRes = LD_GetResult( );//一次ASR識別流程結束,去取ASR識別結果                                         
                     printf("\r\n識別碼:%d", nAsrRes);                     
                                
                     switch(nAsrRes)                       //對結果執行相關操作,客戶修改
                        {
                            case CODE_XCQJ:                    //命令“小車前進”
                                printf(" 小車前進 指令識別成功\r\n");
                           
                                                             break;
                            case CODE_XCHT:                         //命令“小車后退”
                                printf(" 小車后退 指令識別成功\r\n");
                                                             break;
                            case CODE_XCYZ:                    //命令“小車右轉”
                                printf(" 小車右轉 指令識別成功\r\n");
                                                            break;
                            case CODE_XCZZ:                        //命令“小車左轉”
                                printf(" 小車左轉 指令識別成功\r\n");
                                                            break;
                            case CODE_XCTZ:                        //命令“小車停止”
                                printf(" 小車停止 指令識別成功\r\n");
                           
                            default:break;
                        }   
                    nAsrStatus = LD_ASR_NONE;
                    break;
            case LD_ASR_FOUNDZERO:
            default:
                    nAsrStatus = LD_ASR_NONE;
                    break;
            }//switch
        //開發板測試
        Board_text(nAsrRes );
    }// while
}

static uint8 LD_AsrAddFixed(void)
{
    uint8 k, flag;
    uint8 nAsrAddLength;
    #define DATE_A 5    //數組二維數值
    #define DATE_B 20        //數組一維數值
    //添加關鍵詞
    uint8  sRecog[DATE_A][DATE_B] = {
                 "xiao che qian jian",\
                "xiao che hou tui",\
                "xiao che you zhuan",\
                "xiao che zuo zhuan",\
                "xiao che ting zhi"\
        
                                                                    };   
    uint8  pCode[DATE_A] = {
                                                                 CODE_XCQJ,    \
                                                                CODE_XCHT,    \
                                                                CODE_XCYZ,\
                                                                CODE_XCZZ,    \
                                                                CODE_XCTZ        \
                                                            };    //添加識別碼
    flag = 1;
    for (k=0; k<DATE_A; k++)
    {            
        if(LD_Check_ASRBusyFlag_b2() == 0)
        {
            flag = 0;
            break;
        }

        LD_WriteReg(0xc1, pCode[k] );
        LD_WriteReg(0xc3, 0);
        LD_WriteReg(0x08, 0x04);
        LD3320_delay(1);
        LD_WriteReg(0x08, 0x00);
        LD3320_delay(1);

        for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
        {
            if (sRecog[k][nAsrAddLength] == 0)
                break;
            LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
        }
        LD_WriteReg(0xb9, nAsrAddLength);
        LD_WriteReg(0xb2, 0xff);
        LD_WriteReg(0x37, 0x04);
    }     
    return flag;
}

static void Board_text(uint8 Code_Val)
{                                                                                    
    switch(Code_Val)  //對結果執行相關操作
    {
        case CODE_XCQJ:  //命令“小車前進”
            car_go();
        break;
        case CODE_XCHT:      //命令“小車后退”
            car_back();
        break;
        case CODE_XCYZ:    //命令“小車右轉”
            car_right();
        break;
        case CODE_XCZZ:        //命令“小車左轉”
        car_left();
        break;
        case CODE_XCTZ:        //命令“小車停止”
            car_stop();
        break;
        default:break;
    }   
}

static void Delayms(uint16 i)
{
    unsigned char a,b;
    for(;i>0;i--)
            for(b=4;b>0;b--)
                for(a=113;a>0;a--);   
}


static void car_go(void)
{

    M1_OFF();M3_OFF();M6_OFF();M7_OFF();
    M2_ON();M4_ON();M5_ON();M8_ON();
   
    E1_ON();E2_ON();E3_ON();E4_ON();   
}

static void car_back(void)
{

    M2_OFF();M4_OFF();M5_OFF();M8_OFF();
    M1_ON();M3_ON();M6_ON();M7_ON();
   
    E1_ON();E2_ON();E3_ON();E4_ON();   
}

static void car_right(void)
{
M3_OFF();M7_OFF();
M4_ON();M8_ON();
E2_ON();E4_ON();
}

static void car_left(void)
{
    M1_OFF();M6_OFF();
    M2_ON();M5_ON();;
   
    E1_ON();E3_ON();
}



static void car_stop(void)
{
E1_OFF();E2_OFF();E3_OFF();E4_OFF();

}




///相關初始化
static void LD3320_init(void)
{
    LD3320_GPIO_Cfg();   
    LD3320_EXTI_Cfg();
    LD3320_SPI_cfg();
    car_Init();
    LD_reset();
}

static void LD3320_GPIO_Cfg(void)
{   
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(LD3320RST_GPIO_CLK | LD3320CS_GPIO_CLK,ENABLE);
        //LD_CS    /RSET
        GPIO_InitStructure.GPIO_Pin =LD3320CS_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(LD3320CS_GPIO_PORT,&GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin =LD3320RST_PIN;
        GPIO_Init(LD3320RST_GPIO_PORT,&GPIO_InitStructure);
}

static void LD3320_EXTI_Cfg(void)
{
  EXTI_InitTypeDef EXTI_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   

    RCC_APB2PeriphClockCmd(LD3320IRQ_GPIO_CLK, ENABLE);
  GPIO_InitStructure.GPIO_Pin =LD3320IRQ_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(LD3320IRQ_GPIO_PORT, &GPIO_InitStructure);
    //外部中斷線配置
  GPIO_EXTILineConfig(LD3320IRQEXIT_PORTSOURCE, LD3320IRQPINSOURCE);
  EXTI_InitStructure.EXTI_Line = LD3320IRQEXITLINE;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
    //中斷嵌套配置
  NVIC_InitStructure.NVIC_IRQChannel = LD3320IRQN;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

static void LD3320_SPI_cfg(void)
{
    SPI_InitTypeDef  SPI_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
  //spi端口配置
    RCC_APB2PeriphClockCmd(LD3320SPI_CLK,ENABLE);        
  RCC_APB2PeriphClockCmd(LD3320WR_GPIO_CLK | LD3320SPIMISO_GPIO_CLK | LD3320SPIMOSI_GPIO_CLK | LD3320SPISCK_GPIO_CLK,ENABLE);
   
    GPIO_InitStructure.GPIO_Pin = LD3320SPIMISO_PIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(LD3320SPIMISO_GPIO_PORT,&GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin = LD3320SPIMOSI_PIN;
    GPIO_Init(LD3320SPIMOSI_GPIO_PORT,&GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = LD3320SPISCK_PIN;
    GPIO_Init(LD3320SPISCK_GPIO_PORT,&GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin = LD3320WR_PIN;               
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(LD3320WR_GPIO_PORT, &GPIO_InitStructure);
   
    LD_CS_H();
   
    SPI_Cmd(LD3320SPI, DISABLE);

    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;       //全雙工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                   //主模式
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                           //8位
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                                       //時鐘極性 空閑狀態時,SCK保持低電平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                                                   //時鐘相位 數據采樣從第一個時鐘邊沿開始
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                           //軟件產生NSS
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;   //波特率控制 SYSCLK/128
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                       //數據高位在前
    SPI_InitStructure.SPI_CRCPolynomial = 7;                                                           //CRC多項式寄存器初始值為7
    SPI_Init(LD3320SPI, &SPI_InitStructure);

    SPI_Cmd(LD3320SPI, ENABLE);
}

static void car_Init(void)
{   
        GPIO_InitTypeDef GPIO_InitStructure;
   
        RCC_APB2PeriphClockCmd(M1_GPIO_CLK | M2_GPIO_CLK | M3_GPIO_CLK | M4_GPIO_CLK|M5_GPIO_CLK | M6_GPIO_CLK | M7_GPIO_CLK | M8_GPIO_CLK| E1_GPIO_CLK| E2_GPIO_CLK| E3_GPIO_CLK| E4_GPIO_CLK,ENABLE);
   
        GPIO_InitStructure.GPIO_Pin = M1_PIN;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(M1_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = M2_PIN;
        GPIO_Init(M2_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = M3_PIN;
        GPIO_Init(M3_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = M4_PIN;
        GPIO_Init(M4_GPIO_PORT, &GPIO_InitStructure);   
      GPIO_InitStructure.GPIO_Pin = M5_PIN;
        GPIO_Init(M5_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = M6_PIN;
        GPIO_Init(M6_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = M7_PIN;
        GPIO_Init(M7_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = M8_PIN;
        GPIO_Init(M8_GPIO_PORT, &GPIO_InitStructure);
   
   
   
      GPIO_InitStructure.GPIO_Pin = E1_PIN;
        GPIO_Init(E1_GPIO_PORT, &GPIO_InitStructure);
       GPIO_InitStructure.GPIO_Pin = E2_PIN;
        GPIO_Init(E2_GPIO_PORT, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = E3_PIN;
        GPIO_Init(E3_GPIO_PORT, &GPIO_InitStructure);
       GPIO_InitStructure.GPIO_Pin = E4_PIN;
        GPIO_Init(E4_GPIO_PORT, &GPIO_InitStructure);
   

}
///相關初始化 end

///中間層
void EXTI15_10_IRQHandler(void)
{
    if(EXTI_GetITStatus(LD3320IRQEXITLINE)!= RESET )
    {
        ProcessInt();
         printf("進入中斷12\r\n");   
        EXTI_ClearFlag(LD3320IRQEXITLINE);
        EXTI_ClearITPendingBit(LD3320IRQEXITLINE);//清除LINE上的中斷標志位  
    }
}

static void LD3320_delay(unsigned long uldata)
{
    unsigned int i  =  0;
    unsigned int j  =  0;
    unsigned int k  =  0;
    for (i=0;i<5;i++)
    {
        for (j=0;j<uldata;j++)
        {
            k = 200;
            while(k--);
        }
    }
}

static uint8 RunASR(void)
{
    uint8 i=0;
    uint8 asrflag=0;
    for (i=0; i<5; i++)        //防止由于硬件原因導致LD3320芯片工作不正常,所以一共嘗試5次啟動ASR識別流程
    {
        LD_AsrStart();            //初始化ASR
        LD3320_delay(100);
        if (LD_AsrAddFixed()==0)    //添加關鍵詞語到LD3320芯片中
        {
            LD_reset();                //LD3320芯片內部出現不正常,立即重啟LD3320芯片
            LD3320_delay(50);    //并從初始化開始重新ASR識別流程
            continue;
        }
        LD3320_delay(10);
        if (LD_AsrRun() == 0)
        {
            LD_reset();             //LD3320芯片內部出現不正常,立即重啟LD3320芯片
            LD3320_delay(50);//并從初始化開始重新ASR識別流程
            continue;
        }
        asrflag=1;
        break;                        //ASR流程啟動成功,退出當前for循環。開始等待LD3320送出的中斷信號
    }   
    return asrflag;
}

static void LD_reset(void)
{
    uint8 i;
    LD_RST_H();
    LD3320_delay(100);
    LD_RST_L();
    LD3320_delay(100);
    LD_RST_H();
    LD3320_delay(100);
    LD_CS_L();
    LD3320_delay(100);
    LD_CS_H();        
    LD3320_delay(100);
   
    i=LD_ReadReg(0x6);
    LD_WriteReg(0x35, 0x33);
    LD_WriteReg(0x1b, 0x55);
    LD_WriteReg(0xb3, 0xaa);
    i=LD_ReadReg(0x35);
    i=LD_ReadReg(0x1b);
    i=LD_ReadReg(0xb3);
    i=i;
    LD_RST_H();
    LD3320_delay(100);
    LD_RST_L();
    LD3320_delay(100);
    LD_RST_H();
    LD3320_delay(100);
    LD_CS_L();
    LD3320_delay(100);
    LD_CS_H();        
    i=LD_ReadReg(0x6);
    LD3320_delay(100);
    i=LD_ReadReg(0x35);
    i=LD_ReadReg(0x1b);
    i=LD_ReadReg(0xb3);
    i=i;
}

static void LD_AsrStart(void)
{
    LD_Init_ASR();
}

uint8 LD_Check_ASRBusyFlag_b2(void)
{
    uint8 j;
    uint8 flag = 0;
    for (j=0; j<10; j++)
    {
        if (LD_ReadReg(0xb2) == 0x21)
        {
            flag = 1;
            break;
        }
        LD3320_delay(10);        
    }
    return flag;
}
///中間層end


///寄存器操作
static uint8 spi_send_byte(uint8 byte)
{
    while (SPI_I2S_GetFlagStatus(LD3320SPI, SPI_I2S_FLAG_TXE) == RESET);
    SPI_I2S_SendData(LD3320SPI,byte);
    while (SPI_I2S_GetFlagStatus(LD3320SPI,SPI_I2S_FLAG_RXNE) == RESET);
    return SPI_I2S_ReceiveData(LD3320SPI);
}

static void LD_WriteReg(uint8 data1,uint8 data2)
{
    LD_CS_L();
    LD_SPIS_L();
    spi_send_byte(0x04);
    spi_send_byte(data1);
    spi_send_byte(data2);
    LD_CS_H();
}

static uint8 LD_ReadReg(uint8 reg_add)
{
    uint8 i;
    LD_CS_L();
    LD_SPIS_L();
    spi_send_byte(0x05);
    spi_send_byte(reg_add);
    i=spi_send_byte(0x00);
    LD_CS_H();
    return(i);
}

static uint8 LD_GetResult(void)
{
    return LD_ReadReg(0xc5);
}

static uint8 LD_AsrRun(void)
{
    LD_WriteReg(0x35, MIC_VOL);
    LD_WriteReg(0x1C, 0x09);
    LD_WriteReg(0xBD, 0x20);
    LD_WriteReg(0x08, 0x01);
    LD3320_delay( 5 );
    LD_WriteReg(0x08, 0x00);
    LD3320_delay( 5);

    if(LD_Check_ASRBusyFlag_b2() == 0)
    {
        return 0;
    }

    LD_WriteReg(0xB2, 0xff);   
    LD_WriteReg(0x37, 0x06);
    LD_WriteReg(0x37, 0x06);
    LD3320_delay(5);
    LD_WriteReg(0x1C, 0x0b);
    LD_WriteReg(0x29, 0x10);
    LD_WriteReg(0xBD, 0x00);   
    return 1;
}

static void ProcessInt(void)
{
    uint8 nAsrResCount=0;

    ucRegVal = LD_ReadReg(0x2B);

// 語音識別產生的中斷
//(有聲音輸入,不論識別成功或失敗都有中斷)
    LD_WriteReg(0x29,0) ;
    LD_WriteReg(0x02,0) ;

    if((ucRegVal & 0x10) && LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35)        
    {     
            nAsrResCount = LD_ReadReg(0xba);

            if(nAsrResCount>0 && nAsrResCount<=4)
            {
                nAsrStatus=LD_ASR_FOUNDOK;                 
            }
            else
            {
                nAsrStatus=LD_ASR_FOUNDZERO;
            }   
    }
    else
    {
        nAsrStatus=LD_ASR_FOUNDZERO;//執行沒有識別
    }

    LD_WriteReg(0x2b,0);
    LD_WriteReg(0x1C,0);//寫0:ADC不可用
    LD_WriteReg(0x29,0);
    LD_WriteReg(0x02,0);
    LD_WriteReg(0x2B,0);
    LD_WriteReg(0xBA,0);   
    LD_WriteReg(0xBC,0);   
    LD_WriteReg(0x08,1);//清除FIFO_DATA
    LD_WriteReg(0x08,0);//清除FIFO_DATA后 再次寫0
}

static void LD_Init_Common(void)
{
    LD_ReadReg(0x06);  
    LD_WriteReg(0x17, 0x35);
    LD3320_delay(5);
    LD_ReadReg(0x06);  

    LD_WriteReg(0x89, 0x03);  
    LD3320_delay(5);
    LD_WriteReg(0xCF, 0x43);   
    LD3320_delay(5);
    LD_WriteReg(0xCB, 0x02);
   
    /*PLL setting*/
    LD_WriteReg(0x11, LD_PLL_11);      
    if (nLD_Mode == LD_MODE_MP3)
    {
        LD_WriteReg(0x1E, 0x00);
        LD_WriteReg(0x19, LD_PLL_MP3_19);   
        LD_WriteReg(0x1B, LD_PLL_MP3_1B);   
        LD_WriteReg(0x1D, LD_PLL_MP3_1D);
    }
    else
    {
        LD_WriteReg(0x1E,0x00);
        LD_WriteReg(0x19, LD_PLL_ASR_19);
        LD_WriteReg(0x1B, LD_PLL_ASR_1B);        
      LD_WriteReg(0x1D, LD_PLL_ASR_1D);
    }
    LD3320_delay(5);
   
    LD_WriteReg(0xCD, 0x04);
    LD_WriteReg(0x17, 0x4c);
    LD3320_delay(1);
    LD_WriteReg(0xB9, 0x00);
    LD_WriteReg(0xCF, 0x4F);
    LD_WriteReg(0x6F, 0xFF);
}

static void LD_Init_ASR(void)
{
    nLD_Mode=LD_MODE_ASR_RUN;
    LD_Init_Common();

    LD_WriteReg(0xBD, 0x00);
    LD_WriteReg(0x17, 0x48);   
    LD3320_delay(5);
    LD_WriteReg(0x3C, 0x80);   
    LD_WriteReg(0x3E, 0x07);
    LD_WriteReg(0x38, 0xff);   
    LD_WriteReg(0x3A, 0x07);
    LD_WriteReg(0x40, 0);         
    LD_WriteReg(0x42, 8);
    LD_WriteReg(0x44, 0);   
    LD_WriteReg(0x46, 8);
    LD3320_delay( 1 );
}
///寄存器操作 end



全部代碼51hei附件下載:
UNV-LD3320 基本識別工程-STM32F103ZET6.7z (192.05 KB, 下載次數: 77)

評分

參與人數 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:476415 發表于 2021-7-25 10:15 來自手機 | 只看該作者
在小車上響應速度如何?是否需要降低車速?
回復

使用道具 舉報

板凳
ID:933150 發表于 2021-7-25 16:08 來自手機 | 只看該作者
isyido 發表于 2021-7-25 10:15
在小車上響應速度如何?是否需要降低車速?

可以降速的,調pwn就可以了,用了time8的四個通道控制四個輪子,這個四個輪子可以控制的
回復

使用道具 舉報

地板
ID:1117732 發表于 2024-4-22 11:53 | 只看該作者
isyido 發表于 2021-7-25 10:15
在小車上響應速度如何?是否需要降低車速?

速度通過PWM波調整就好了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 四虎成人精品永久免费av九九 | 美女露尿口视频 | 欧美精品一区久久 | 四虎精品在线 | 中文字幕亚洲精品在线观看 | 久色视频在线 | 91视频一区 | 精品在线| 精品av | 精品久久久久久久久久久 | 国产美女自拍视频 | 九九热免费观看 | 久久久久久久久久久久亚洲 | av天天看| 久久国内精品 | 亚洲国产看片 | 国产视频一区二区三区四区五区 | 亚洲欧美一区二区三区在线 | 欧洲国产精品视频 | 国产欧美日韩一区二区三区在线 | 亚洲免费在线 | 国产中文字幕网 | 欧美日韩免费视频 | 日本国产欧美 | 成人高清视频在线观看 | 欧美老少妇一级特黄一片 | 日韩有码一区 | 日韩一区和二区 | 久久久久久高潮国产精品视 | 91精品国产高清久久久久久久久 | 欧美一区二区三区在线看 | av色站 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 啪啪免费 | 在线国产一区二区 | 爱爱视频在线观看 | 欧美亚洲国产一区二区三区 | 亚洲精品天堂 | 亚洲高清视频在线观看 | 午夜免费 | 国产福利在线视频 |