Étape 7: programmation
Après que j’ai assemblé le premier chargeur, j’ai commencé à développer du code pour le faire fonctionner.
J’ai commencé en définissant toutes les broches e/s et puis faire un essai pour s’assurer que j’ai eu toute chose définie correctement. Prochaine étape consistait à définir le niveau de tension de la batterie qui régissent les machines d’État.
A partir de là j’ai commencé à tourner la machine d’état de sudo-code que j’ai eu à la page précédente dans le code réel.
travaillé sur l’ordinateur d’état OK, mais il y avait un gros problème causant des problèmes que j’ai eu à résoudre avant d’aller plus loin. Les niveaux de tension analogique étaient dans tous les sens. Lorsque les piles ont en charge la tension fléchi secouer les mesures de tension de la cellule significativement. Batteries Li-ion ont besoin d’être exposé au + - 0.05V exactitude et j’ai pu l’orge Gardez-le à +-0, 25V avec la référence de tension Arduino par défaut. Avant j’ai affublé un un régulateur externe à utiliser comme référence, je suis tombé sur ce https://code.google.com/p/tinkerit/wiki/SecretVolt...
Apparemment, vous pouvez utiliser le 1.1V interne référence pour vérifier le NIV. Après avoir joué avec cela pour un peu, j’ai pu suivre la tension d’entrée et de régler les facteurs de conversion pour obtenir plus précis de cellules mesures de tension. Ce n’était pas encore assez... J’ai remarqué que la tension d’entrée flottait +-0, 2V autour de ce que lu mon voltmètre. J’ai pensé que mon convertisseur buck de bon marché eBay fournissait probablement pas la tension plus propre et mon compteur bon marché était en moyenne de cette sortie. Je ne veux pas regarder cela avec ma portée pour voir ce qui se passe réellement, mais mettre des 660uF dans l’ensemble de la tension d’entrée réduit l’ondulation de tension bien sous 0.05V. En théorie la sensibilité de la lecture de l’ADC de l’Arduino devrait être d’environ 0.005V, mais c’est difficile à obtenir dans la pratique. J’ai quelques idées qui vont m’aider à obtenir beaucoup plus près que sensibilité théorique si je fais jamais plus obtenir plus de conseils faits.
L’étalonnage de la tension d’entrée prendre environ 140us plus un retard, j’ai pu réduire à 500us ainsi alors que définir la limite inférieure de la 750us période environ d’interruption. Je n’ai pas encore profilé il mais la machine d’État prend-il moins 1ms puis d’exécuter, alors j’ai monté la fréquence d’interruption timer 1000 Hz. 1000Hz est l’un des quelques chiffre rond gentil vous pouvez obtenir partir des minuteries et facilite le calcul de la capacité.
En fin de compte, j’ai fait des tableaux pour chaque variable utilisé par l’ordinateur d’État et mis en œuvre comme une fonction qui prennent le nombre de cellules comme entrée d’index de tous les tableaux. La fonction retourne l’état suivant. Il y a un autre tableau qui maintiennent l’état actuel de chaque cellule.
Mise à jour 24 octobre 2015 :
J’ai posté un code j’ai été jouer avec elle calcule la capacité continue dans le void interrupt routage quel que soit l’état il fonctionne assez bien mais bruit sur la cause de ligne ADC a fluctuations d’autour de +-1mAh alors que dans un endroit frais vers le bas et charge précise qui n’est pas trop mauvais.
Il n’y a pas enregistrement effectué sur l’arduino. J’ai été en utilisant putty terminal pour connecter la sortie vers un fichier csv je peux jusqu'à charge importation dans excel. Le principal problème avec la connexion sur l’arduino est qu’il faudra environ 2 ms pour stocker un flotteur ou long à l’eeprom qui est une éternité par rapport à la < 1ms requis par les fonctions de l’interruption. Il y a tout simplement pas assez de temps CPU pour faire n’importe quel enregistrement sur l’eeprom au-delà peut-être stocker les capacités.
Je pourrais regarder int à l’aide de la psoc4 (http://www.cypress.com/file/141306/download) sur la prochaine version de l’analyseur, j’ai un peu d’eux autour de la pose et moi avons eu l’intention de faire un projet avec eux. Ce serait un nouveau instructable.