stm32F1 に基づく Bluetooth コントロール カーの完全なハードウェア コードはオープン ソースです。

序章

   「stm32F1ベースのBluetoothコントロールカー」は、L898Nモータードライブモジュール、パワーマネジメントモジュール、stm32f1メインコントロールモジュール、Bluetoothシリアルポート通信モジュールで構成されています。モーター駆動モジュールは 2 つの L298N チップを使用して 4 つのモーターを駆動し、イネーブル端子はメイン制御ボードからの 4 つの信号レベルに接続され、電源管理モジュールは LM2940-5.0 チップを使用して 12V を 5V に変換し、12V はモーターモジュールの電源、5VはBluetoothモジュール、センサーなどの電源に使用され、メインコントロールモジュールはMDK編集プログラムを採用し、それをメインコントロールボードにダウンロードして相互作用を実現しますハードウェアとソフトウェア; Bluetoothシリアルポート通信モジュールは、シリアルポート通信を介してメインコントロールボードと通信し、同時に携帯電話と通信します; 制御端末モジュールは、Bluetoothをオンにしたり、検索したりするなどの機能のセットですBluetooth、および車の制御。ユーザーは、携帯電話制御端末を介して車の動きを制御し、ユーザーが必要とするいくつかの機能やサービスを実現できます。

 

L298N ドライバー

L298N は、ST Company 製の高電圧、大電流のモーター ドライブ チップです。チップは15ピンパッケージにパッケージ化されています。主な機能は次のとおりです: 高動作電圧、最大動作電圧は 46 V に達することができます; 大出力電流、瞬間的なピーク電流は 3 A に達することができます、連続動作電流は 2 A です; 定格電力は 25 W です。2 つの H ブリッジを含む高電圧、大電流のフルブリッジ ドライバを使用して、DC モーター、ステッピング モーター、リレー コイルなどの誘導性負荷を駆動できます; 標準ロジック レベル信号によって制御されます; ロジック電源があります。内部ロジック回路部が低電圧で動作するように入力端子に入力信号の影響を許可または禁止し、外部検出抵抗を接続してその変化を制御回路にフィードバックすることができます。モーターの駆動にはL298Nチップを使用しており、このチップは2相ステッピングモーターまたは4相ステッピングモーターを駆動することができ、2つのDCモーターを駆動することもできます。

1.コントロールボード内に5Vロジックレベル変換チップがあり、追加の5V電源は必要ありません。

2. EN1、EN2、EN3、および EN4 が PWM 速度制御信号に接続されていない場合、2 次ピンを対応する制御と短絡する必要があります。

3. GND と 12V はモーター電源に接続され、そのうちの 12V は 7V ~ 24V レベルに接続できます. ボード上の電源スイッチは、ロジック 5V レベルを制御するためのスイッチにすぎません. L298 の 12V 電源はこのスイッチによって制御されません。

4. 出力端子と入力端子は1対1で対応しており、入力端子が5Vのとき出力端子もハイレベル、入力端子がローレベルのとき出力端子もローレベルとなります。レベル。

電源管理モジュール

電源はシステム全体が安定して動作するための前提条件であるため、妥当な電源設計が必要です。

次の 2 点に注意してください。

1.一般的な安定化電源とは異なり、車のバッテリー電圧は一般的に6〜8V程度であり、バッテリー損失時の電圧降下も考慮する必要があるため、一般的に使用されている78シリーズの電圧レギュレーターチップは使用できません。この記事では、より一般的な LM2940-5.0 を例として、ドロップアウト電圧の低い電圧レギュレータ チップを使用します。

2. シングルチップ マイクロコンピュータは、大電流デバイスからシングルチップ マイクロコンピュータへの干渉を回避し、シングルチップ マイクロコンピュータの安定した動作に影響を与えることを避けるために、大電流デバイスとは別に電源を供給する必要があります。

現在、さまざまな種類の新しい電源チップが無限に出回っています.読者は自分のニーズに応じて電源チップを選択できます.この設計では、調整された電圧差と最大出力電流の2つの指標が設計要件を満たすことができるかどうかに主に注意を払う必要があります.

LM2940シリーズは、出力電圧固定の低ドロップアウト3端子レギュレータで、出力電圧は5V、8V、10V、最大出力電流は1A、出力電流が1Aのとき、入出力電圧差は最小です。 0.8V 未満; 最大入力電圧は 26V; 動作温度 -40~+125℃;

自己消費電流低減回路、電流制限、過熱保護、バッテリ逆極性および逆挿入保護回路が含まれています。同時に、LM2940 は手頃な価格で比較的購入しやすいため、この設計での使用に非常に適しています。図に示すように、2つの電源が使用されているため、そのうちの1つを使用して、STM32F1回路基板、インジケータライトなどに個別に電源を供給することができます。もう 1 つのチャネルは、L298N、ステアリング ギア、および Bluetooth の動作電圧を提供し、L298N の駆動電圧は、処理なしでバッテリーから直接提供されます。ステアリングギアは、6V または直接 5V で駆動できます。

 PCB ダイアグラム:

システムソフトウェア設計

 メインプログラム:Bluetoothの受信信号を判断して応答するBluetoothデータ受信判断機能で構成されています。(図では初期化コードは省略しています)

 while(1)
      {           switch(flag)               {                     ケース 0: Stop(); 壊す ;                     ケース 1: Turnleft(); 壊す ;                     ケース 2: Turnright(); 壊す ;                     ケース 3: ターンバック(); 壊す ;                     ケース 4: Turnfront(); 壊す ;                     ケース 5: Leftaround(); 壊す ;                     ケース 6: Rightaround(); 壊す ;                     デフォルト: ストップ(); 壊す ;                                                                                                               }                 }
        











シリアルポート構成機能:

//割り込みを使用して Bluetooth を送受信
    
      GPIO_InitTypeDef GPIO_InitStructure;
      USART_InitTypeDef USART_InitStructure;
      NVIC_InitTypeDef NVIC_InitStructure;

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //USART1、GPIOAクロックを有効にする
// USART_DeInit(USART1); //シリアルポート1をリセット
// USART1_TX PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
    GP IO_InitStruc ture.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //多重プッシュプル出力
    GPIO_Init(GPIOA, &GPIO_InitStructure); //PA9 を初期化
   
    //USART1_RX PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPI O_Mode_IN_FLOATING;//浮動入力
    GPIO_Init (GPIOA, &GPIO_InitStructure); //PA10 を初期化します     
    
     
    /* 次のように構成された USARTx:
       - BaudRate = 9600 ボー ボー レート
       - ワード長 = 8 ビット データ長 -
       1 ストップ ビット ストップ ビット -
       パリティ チェック方法なし -
       ハードウェア フロー制御が無効 (RTS および CTS 信号) ハードウェア制御フロー -
       送受信が有効 送受信が有効
    */
        USART_InitStructure.USART_BaudRate = 9600;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No; one;
        USART_InitStructure.
        USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

        USART_Init(USART1, &USART_InitStructure);
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);// スイッチ中断

    //Usart1 NVIC 構成
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
      NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//プリエンプション優先度 3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
      //サブ優先度 3
      NVIC_Init Structure.NVIC_IRQChannelCmd = ENABLE; //IRQ チャネルEnable
      NVIC_Init(&NVIC_InitStructure); //指定されたパラメータに従って VIC レジスタを初期化します
      USART_Cmd(USART1, ENABLE); //シリアル ポートを有効にします 

モーター駆動GPIO初期化機能:

    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_ピン_1 | GPIO_ピン_2 | GPIO_ピン_6 | GPIO_ピン_7 | GPIO_Pin_8|GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_SetBits(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_6 | GPIO_Pin_9);

モーター実行機能:

//停止モード
void Stop(void)
{     GPIO_ResetBits(GPIOC,GPIO_Pin_0);     GPIO_ResetBits(GPIOC,GPIO_Pin_1);     GPIO_ResetBits(GPIOC,GPIO_Pin_2);     GPIO_ResetBits(GPIOC,GPIO_Pin_9); }





//左回転モード -> 左モーター前進、右モーター後退
void Turnleft(void)
{     GPIO_SetBits(GPIOC,GPIO_Pin_0);  GPIO_ResetBits     (GPIOC,GPIO_Pin_1) ; GPIO_ResetBits(GPIOC     ,GPIO_Pin_2);     GPIO_SetBits(GPIOC,GPIO_Pin_9);     GPIO_SetBits( GPIOC、GPIO_Pin_6); }





//右折モード -> 左モーター後退、右モーター前進
void Turnright(void)
{     GPIO_ResetBits(GPIOC,GPIO_Pin_0); GPIO_SetBits( GPIOC     ,     GPIO_Pin_1); GPIO_SetBits(GPIOC, GPIO_Pin_2);     GPIO_ResetBits(GPIOC, GPIO_Pin_9);     GPIO_SetBits( GPIOC、GPIO_Pin_6); }





//後方モード -> 左モーター逆転、右モーター逆転
void Turnback(void)
{     GPIO_ResetBits(GPIOC,GPIO_Pin_0); GPIO_SetBits     (GPIOC, GPIO_Pin_1) ; GPIO_ResetBits(GPIOC     ,GPIO_Pin_2);     GPIO_SetBits(GPIOC,GPIO_Pin_9);     GPIO_SetBits (GPIOC ,GPIO_Pin_8); }
    





    

//前進モード -> 左モーター前進、右モーター前進
void Turnfront(void)
{     GPIO_SetBits(GPIOC,GPIO_Pin_0);     GPIO_ResetBits(GPIOC,GPIO_Pin_1) ; GPIO_SetBits(GPIOC     ,GPIO_Pin_2);      GPIO_ResetBits(GPIOC,GPIO_Pin_9);     GPIO_SetBits (GPIOC ,GPIO_Pin_7); }





//左モーターを中心に左回転
void Leftaround(void)
{     GPIO_SetBits(GPIOC,GPIO_Pin_0);     GPIO_ResetBits(GPIOC,GPIO_Pin_1); GPIO_SetBits(GPIOC,     GPIO_Pin_2);     GPIO_SetBits(GPIOC,GPIO_Pin_9); }




    

//右モーターを中心に右回転
void Rightaround(void)
{     GPIO_SetBits(GPIOC,GPIO_Pin_0);     GPIO_SetBits(GPIOC,GPIO_Pin_1);     GPIO_SetBits(GPIOC,GPIO_Pin_2);     GPIO_ResetBits(GPIOC,GPIO_Pin_9); }




    

上記は主なコードとハードウェア情報ですが、モバイルアプリ、完全なコード、ハードウェア回路図、PCB などの詳細情報が必要な場合は、ダウンロード情報に記載してください。

おすすめ

転載: blog.csdn.net/weixin_53129688/article/details/128037578